﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Arquitectura.SEM;

namespace FAS.SEM.ClasesSEM
{
    /*******************************************************
    /* Autor : Efrain Gutierrez / Miguel Ortiz
    /* Fecha : 11/04/2013
    /* Lenguaje: C# Framework 4 .NET
    /* Descripción: Clase encargada de las funciones de los Opciones SEM
    /********************************************************/

    public class OpcionSEM : Arquitectura.SEM.AbstractSem
    {
        /*Atributos Globales*/
        private int idOpcion;
        private String texto;
        private Boolean respuesta;
    
        /********************************************************
        /* Constructor
        /* Proposito: inicializar el objeto.
        /* Parametros : ninguno
        /* Limitaciones: ninguna.
        /* Retorna: ninguna
        /*********************************************************/    
        public OpcionSEM() : base()
        {
        }
   
    
        /********************************************************
        /* getIdOpcion()
        /* Proposito: regresar atributo idOpcion.
        /* Parametros : ninguno
        /* Limitaciones: debe de ser diferente de null.
        /* Retorna: el valor de idOpcion.
        /*********************************************************/
        public int getIdOpcion()
        {
            return this.idOpcion; 
        }
    
        /********************************************************
        /* getTexto()
        /* Proposito: regresar atributo texto.
        /* Parametros : ninguno
        /* Limitaciones: debe de ser diferente de null.
        /* Retorna: el valor de texto
        /*********************************************************/
        public string getTexto()
        {
            return this.texto; 
        }
   
        /********************************************************
        /* setIdOpcion(int IdOpcion)
        /* Proposito: cambiar el valor del atributo idOpcion.
        /* Parametros : idOpcion
        /* Limitaciones: el nuevo valor debe de ser diferente de null.
        /* Retorna: nada
        /*********************************************************/    
        public void setIdOpcion(int idOpcion)
        {
           this.idOpcion= idOpcion; 
        }
    
        /********************************************************
        /* setTexto(string texto)
        /* Proposito: cambiar el valor del atributo nombre.
        /* Parametros : texto
        /* Limitaciones: el nuevo valor debe de ser diferente de null.
        /* Retorna: nada
        /*********************************************************/
        public void setTexto(String texto)
        {
            if(texto!= null)
                this.texto= texto; 
        }
    
        /********************************************************
        /* esRespuesta()
        /* Proposito: indicar si la opcion actual es la respuesta
        /* Parametros : Ninguna
        /* Limitaciones: Opcion creada
        /* Retorna: Verdadero/Falso
        /*********************************************************/
        public Boolean esRespuesta()
        {
             return this.respuesta;
        }
    
        /********************************************************
        /* getOpcionesDeProblema(int idProblema)
        /* Proposito: buscar opciones en la base de datos de cierto problema
        /* Parametros : id del problema a buscar opciones
        /* Limitaciones: Ninguna
        /* Retorna: Lista de opciones
        /*********************************************************/
        public List<OpcionSEM> getOpcionesDeProblema(int idProblema)
        {
            DataSet result = this.exec("select "+this.id+" from "+this.tabla+" where IdProblema = "+idProblema);
            List<OpcionSEM> lst = new List<OpcionSEM>();
            foreach(DataRow row in result.Tables[0].Rows)
            {
                OpcionSEM o = (OpcionSEM)get(row[0].ToString());
                lst.Add(o);
            }
            return lst;
        }

        /********************************************************
        /* comandos()
        /* Proposito: validar la existencia de un Opcion en la base de datos.
        /* Parametros : ninguno
        /* Limitaciones: Opcion inicializado.
        /* Retorna: Verdadero o Falso
        /*********************************************************/

        protected override void comandos()
        {
            this.id = "IdOpcion";
            this.tabla = "`Opcion`";
            this.strDelete = "DeleteOpcion";
            this.strInsertar = "InsertarOpcion";
            this.strUpdate = "UpdateOpcion";
        }
    
        /********************************************************
        /* fillFas(my_sql_row row)
        /* Proposito: inicializar un Opcion con la info de la base de datos.
        /* Parametros : row de consulta
        /* Limitaciones: row completo mysql
        /* Retorna: Ninguna
        /*********************************************************/
        protected override void fillSem(DataRow row)
        {
            this.idOpcion = int.Parse(row[0].ToString());
            this.respuesta = Boolean.Parse(row[2].ToString());
            this.texto = row[4].ToString();
        }

        /********************************************************
        /* get(int id)
        /* Proposito: inicializar un Opcion a partir de un id desde una base de datos.
        /* Parametros : id del Opcion
        /* Limitaciones: Ninguna
        /* Retorna: Opcion
        /*********************************************************/
        public override AbstractSem get(Object id)
        {
            AbstractSem abs = getAbstractSem(id,this.tabla,this.id);
            return abs;
        }
    
        /********************************************************
        /* getAll
        /* Proposito: inicializar lista de Opciones existentes desde una base de datos.
        /* Parametros : Ninguna
        /* Limitaciones: Ninguna
        /* Retorna: Lista de Opciones
        /*********************************************************/

        public List<OpcionSEM> getAll()
        {
            List<AbstractSem> abs = base.getAll();
            List<OpcionSEM> lst = new List<OpcionSEM>();
            foreach (var v in abs)
                lst.Add((OpcionSEM)v);
            return lst;
        }
    
        /********************************************************
        /* getAtributos()
        /* Proposito: regresar arreglo de atributos locales
        /* Parametros : Ninguna
        /* Limitaciones: Ninguna
        /* Retorna: Arreglo
        /*********************************************************/

        public override Dictionary<string, object> getAtributos()
        {
            Dictionary<string, object> diccionario = new Dictionary<string, object>();
            diccionario.Add("IdOpcionP",idOpcion);
            diccionario.Add("TextoP", texto);
            diccionario.Add("RespuestaP",respuesta);
            return diccionario;
        }
    } // fin de la clase Opcion

}
